home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / swing / SwingUtilities2.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  18.9 KB  |  857 lines

  1. package sun.swing;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.Dimension;
  8. import java.awt.EventQueue;
  9. import java.awt.FocusTraversalPolicy;
  10. import java.awt.Font;
  11. import java.awt.FontMetrics;
  12. import java.awt.Graphics;
  13. import java.awt.Graphics2D;
  14. import java.awt.GraphicsEnvironment;
  15. import java.awt.Point;
  16. import java.awt.PrintGraphics;
  17. import java.awt.Rectangle;
  18. import java.awt.RenderingHints;
  19. import java.awt.Shape;
  20. import java.awt.Toolkit;
  21. import java.awt.event.InputEvent;
  22. import java.awt.event.KeyEvent;
  23. import java.awt.event.MouseEvent;
  24. import java.awt.font.FontRenderContext;
  25. import java.awt.font.LineBreakMeasurer;
  26. import java.awt.font.TextHitInfo;
  27. import java.awt.font.TextLayout;
  28. import java.awt.geom.AffineTransform;
  29. import java.awt.print.PrinterGraphics;
  30. import java.lang.reflect.Field;
  31. import java.lang.reflect.Method;
  32. import java.security.AccessController;
  33. import java.text.AttributedCharacterIterator;
  34. import java.text.AttributedString;
  35. import java.text.Bidi;
  36. import java.util.Locale;
  37. import java.util.concurrent.Callable;
  38. import java.util.concurrent.Future;
  39. import java.util.concurrent.FutureTask;
  40. import javax.swing.JComponent;
  41. import javax.swing.JList;
  42. import javax.swing.JTable;
  43. import javax.swing.ListCellRenderer;
  44. import javax.swing.ListModel;
  45. import javax.swing.ListSelectionModel;
  46. import javax.swing.SwingUtilities;
  47. import javax.swing.UIManager;
  48. import javax.swing.table.TableCellRenderer;
  49. import javax.swing.text.DefaultCaret;
  50. import javax.swing.text.DefaultHighlighter;
  51. import javax.swing.text.Highlighter;
  52. import javax.swing.text.JTextComponent;
  53. import sun.awt.AppContext;
  54. import sun.font.FontDesignMetrics;
  55. import sun.print.ProxyPrintGraphics;
  56.  
  57. public class SwingUtilities2 {
  58.    public static final Object LAF_STATE_KEY = new StringBuffer("LookAndFeel State");
  59.    private static LSBCacheEntry[] fontCache = new LSBCacheEntry[6];
  60.    private static final int CACHE_SIZE = 6;
  61.    private static int nextIndex;
  62.    private static LSBCacheEntry searchKey;
  63.    private static final int MIN_CHAR_INDEX = 87;
  64.    private static final int MAX_CHAR_INDEX = 88;
  65.    public static final FontRenderContext DEFAULT_FRC = new FontRenderContext((AffineTransform)null, false, false);
  66.    public static final Object AA_TEXT_PROPERTY_KEY = new StringBuffer("AATextInfoPropertyKey");
  67.    private static final StringBuilder SKIP_CLICK_COUNT = new StringBuilder("skipClickCount");
  68.    public static final Object COMPONENT_UI_PROPERTY_KEY = new StringBuffer("ComponentUIPropertyKey");
  69.    private static Field inputEvent_CanAccessSystemClipboard_Field = null;
  70.    private static final String UntrustedClipboardAccess = "UNTRUSTED_CLIPBOARD_ACCESS_KEY";
  71.    private static final int CHAR_BUFFER_SIZE = 100;
  72.    private static final Object charsBufferLock = new Object();
  73.    private static char[] charsBuffer = new char[100];
  74.  
  75.    private static final boolean isComplexLayout(char var0) {
  76.       return var0 >= 2304 && var0 <= 3455 || var0 >= 3584 && var0 <= 3711 || var0 >= 6016 && var0 <= 6143 || var0 >= '\ud800' && var0 <= '\udfff';
  77.    }
  78.  
  79.    private static final boolean isSimpleLayout(char var0) {
  80.       return var0 < 1424 || 11776 <= var0 && var0 < '\ud800';
  81.    }
  82.  
  83.    public static final boolean isComplexLayout(char[] var0, int var1, int var2) {
  84.       boolean var3 = true;
  85.  
  86.       for(int var5 = var1; var5 < var2; ++var5) {
  87.          char var4 = var0[var5];
  88.          if (isComplexLayout(var4)) {
  89.             return true;
  90.          }
  91.  
  92.          if (var3) {
  93.             var3 = isSimpleLayout(var4);
  94.          }
  95.       }
  96.  
  97.       if (var3) {
  98.          return false;
  99.       } else {
  100.          return Bidi.requiresBidi(var0, var1, var2);
  101.       }
  102.    }
  103.  
  104.    public static AATextInfo drawTextAntialiased(JComponent var0) {
  105.       return var0 != null ? (AATextInfo)var0.getClientProperty(AA_TEXT_PROPERTY_KEY) : null;
  106.    }
  107.  
  108.    public static int getLeftSideBearing(JComponent var0, FontMetrics var1, String var2) {
  109.       return getLeftSideBearing(var0, var1, var2.charAt(0));
  110.    }
  111.  
  112.    public static int getLeftSideBearing(JComponent var0, FontMetrics var1, char var2) {
  113.       if (var2 < 'X' && var2 >= 'W') {
  114.          Object var4 = null;
  115.          FontRenderContext var5 = getFontRenderContext(var0, var1);
  116.          Font var6 = var1.getFont();
  117.          synchronized(SwingUtilities2.class) {
  118.             LSBCacheEntry var8 = null;
  119.             if (searchKey == null) {
  120.                searchKey = new LSBCacheEntry(var5, var6);
  121.             } else {
  122.                searchKey.reset(var5, var6);
  123.             }
  124.  
  125.             for(LSBCacheEntry var12 : fontCache) {
  126.                if (searchKey.equals(var12)) {
  127.                   var8 = var12;
  128.                   break;
  129.                }
  130.             }
  131.  
  132.             if (var8 == null) {
  133.                var8 = searchKey;
  134.                fontCache[nextIndex] = searchKey;
  135.                searchKey = null;
  136.                nextIndex = (nextIndex + 1) % 6;
  137.             }
  138.  
  139.             return var8.getLeftSideBearing(var2);
  140.          }
  141.       } else {
  142.          return 0;
  143.       }
  144.    }
  145.  
  146.    public static FontMetrics getFontMetrics(JComponent var0, Graphics var1) {
  147.       return getFontMetrics(var0, var1, var1.getFont());
  148.    }
  149.  
  150.    public static FontMetrics getFontMetrics(JComponent var0, Graphics var1, Font var2) {
  151.       return var0 != null ? var0.getFontMetrics(var2) : Toolkit.getDefaultToolkit().getFontMetrics(var2);
  152.    }
  153.  
  154.    public static int stringWidth(JComponent var0, FontMetrics var1, String var2) {
  155.       return var2 != null && !var2.equals("") ? var1.stringWidth(var2) : 0;
  156.    }
  157.  
  158.    public static String clipStringIfNecessary(JComponent var0, FontMetrics var1, String var2, int var3) {
  159.       if (var2 != null && !var2.equals("")) {
  160.          int var4 = stringWidth(var0, var1, var2);
  161.          return var4 > var3 ? clipString(var0, var1, var2, var3) : var2;
  162.       } else {
  163.          return "";
  164.       }
  165.    }
  166.  
  167.    public static String clipString(JComponent var0, FontMetrics var1, String var2, int var3) {
  168.       String var4 = "...";
  169.       int var5 = var2.length();
  170.       var3 -= stringWidth(var0, var1, var4);
  171.       boolean var6 = false;
  172.       synchronized(charsBufferLock) {
  173.          if (charsBuffer != null && charsBuffer.length >= var5) {
  174.             var2.getChars(0, var5, charsBuffer, 0);
  175.          } else {
  176.             charsBuffer = var2.toCharArray();
  177.          }
  178.  
  179.          var6 = isComplexLayout(charsBuffer, 0, var5);
  180.          if (!var6) {
  181.             int var8 = 0;
  182.  
  183.             for(int var9 = 0; var9 < var5; ++var9) {
  184.                var8 += var1.charWidth(charsBuffer[var9]);
  185.                if (var8 > var3) {
  186.                   var2 = var2.substring(0, var9);
  187.                   break;
  188.                }
  189.             }
  190.          }
  191.       }
  192.  
  193.       if (var6) {
  194.          FontRenderContext var7 = getFontRenderContext(var0, var1);
  195.          AttributedString var14 = new AttributedString(var2);
  196.          LineBreakMeasurer var15 = new LineBreakMeasurer(var14.getIterator(), var7);
  197.          int var10 = var15.nextOffset((float)var3);
  198.          var2 = var2.substring(0, var10);
  199.       }
  200.  
  201.       return var2 + var4;
  202.    }
  203.  
  204.    public static void drawString(JComponent var0, Graphics var1, String var2, int var3, int var4) {
  205.       if (var2 != null && var2.length() > 0) {
  206.          if (isPrinting(var1)) {
  207.             Graphics2D var5 = getGraphics2D(var1);
  208.             if (var5 != null) {
  209.                TextLayout var10 = new TextLayout(var2, var5.getFont(), DEFAULT_FRC);
  210.                Color var11 = var5.getColor();
  211.                if (var11 instanceof PrintColorUIResource) {
  212.                   var5.setColor(((PrintColorUIResource)var11).getPrintColor());
  213.                }
  214.  
  215.                var10.draw(var5, (float)var3, (float)var4);
  216.                var5.setColor(var11);
  217.                return;
  218.             }
  219.          }
  220.  
  221.          AATextInfo var9 = drawTextAntialiased(var0);
  222.          if (var9 != null && var1 instanceof Graphics2D) {
  223.             Graphics2D var6 = (Graphics2D)var1;
  224.             Object var7 = null;
  225.             Object var8 = var6.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING);
  226.             if (var9.aaHint != var8) {
  227.                var6.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, var9.aaHint);
  228.             } else {
  229.                var8 = null;
  230.             }
  231.  
  232.             if (var9.lcdContrastHint != null) {
  233.                var7 = var6.getRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST);
  234.                if (var9.lcdContrastHint.equals(var7)) {
  235.                   var7 = null;
  236.                } else {
  237.                   var6.setRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST, var9.lcdContrastHint);
  238.                }
  239.             }
  240.  
  241.             var1.drawString(var2, var3, var4);
  242.             if (var8 != null) {
  243.                var6.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, var8);
  244.             }
  245.  
  246.             if (var7 != null) {
  247.                var6.setRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST, var7);
  248.             }
  249.          } else {
  250.             var1.drawString(var2, var3, var4);
  251.          }
  252.  
  253.       }
  254.    }
  255.  
  256.    public static void drawStringUnderlineCharAt(JComponent var0, Graphics var1, String var2, int var3, int var4, int var5) {
  257.       if (var2 != null && var2.length() > 0) {
  258.          drawString(var0, var1, var2, var4, var5);
  259.          int var6 = var2.length();
  260.          if (var3 >= 0 && var3 < var6) {
  261.             byte var8 = 1;
  262.             int var9 = 0;
  263.             int var10 = 0;
  264.             boolean var11 = isPrinting(var1);
  265.             boolean var12 = var11;
  266.             if (!var11) {
  267.                synchronized(charsBufferLock) {
  268.                   if (charsBuffer != null && charsBuffer.length >= var6) {
  269.                      var2.getChars(0, var6, charsBuffer, 0);
  270.                   } else {
  271.                      charsBuffer = var2.toCharArray();
  272.                   }
  273.  
  274.                   var12 = isComplexLayout(charsBuffer, 0, var6);
  275.                }
  276.             }
  277.  
  278.             if (!var12) {
  279.                FontMetrics var13 = var1.getFontMetrics();
  280.                var9 = var4 + stringWidth(var0, var13, var2.substring(0, var3));
  281.                var10 = var13.charWidth(var2.charAt(var3));
  282.             } else {
  283.                Graphics2D var21 = getGraphics2D(var1);
  284.                if (var21 != null) {
  285.                   FontRenderContext var14 = var11 ? DEFAULT_FRC : var21.getFontRenderContext();
  286.                   TextLayout var15 = new TextLayout(var2, var21.getFont(), var14);
  287.                   TextHitInfo var16 = TextHitInfo.leading(var3);
  288.                   TextHitInfo var17 = TextHitInfo.trailing(var3);
  289.                   Shape var18 = var15.getVisualHighlightShape(var16, var17);
  290.                   Rectangle var19 = var18.getBounds();
  291.                   var9 = var4 + var19.x;
  292.                   var10 = var19.width;
  293.                }
  294.             }
  295.  
  296.             var1.fillRect(var9, var5 + 1, var10, var8);
  297.          }
  298.  
  299.       }
  300.    }
  301.  
  302.    public static int loc2IndexFileList(JList var0, Point var1) {
  303.       int var2 = var0.locationToIndex(var1);
  304.       if (var2 != -1) {
  305.          Object var3 = var0.getClientProperty("List.isFileList");
  306.          if (var3 instanceof Boolean && (Boolean)var3 && !pointIsInActualBounds(var0, var2, var1)) {
  307.             var2 = -1;
  308.          }
  309.       }
  310.  
  311.       return var2;
  312.    }
  313.  
  314.    private static boolean pointIsInActualBounds(JList var0, int var1, Point var2) {
  315.       ListCellRenderer var3 = var0.getCellRenderer();
  316.       ListModel var4 = var0.getModel();
  317.       Object var5 = var4.getElementAt(var1);
  318.       Component var6 = var3.getListCellRendererComponent(var0, var5, var1, false, false);
  319.       Dimension var7 = var6.getPreferredSize();
  320.       Rectangle var8 = var0.getCellBounds(var1, var1);
  321.       if (!var6.getComponentOrientation().isLeftToRight()) {
  322.          var8.x += var8.width - var7.width;
  323.       }
  324.  
  325.       var8.width = var7.width;
  326.       return var8.contains(var2);
  327.    }
  328.  
  329.    public static boolean pointOutsidePrefSize(JTable var0, int var1, int var2, Point var3) {
  330.       if (var0.convertColumnIndexToModel(var2) == 0 && var1 != -1) {
  331.          TableCellRenderer var4 = var0.getCellRenderer(var1, var2);
  332.          Object var5 = var0.getValueAt(var1, var2);
  333.          Component var6 = var4.getTableCellRendererComponent(var0, var5, false, false, var1, var2);
  334.          Dimension var7 = var6.getPreferredSize();
  335.          Rectangle var8 = var0.getCellRect(var1, var2, false);
  336.          var8.width = var7.width;
  337.          var8.height = var7.height;
  338.  
  339.          assert var3.x >= var8.x && var3.y >= var8.y;
  340.  
  341.          return var3.x > var8.x + var8.width || var3.y > var8.y + var8.height;
  342.       } else {
  343.          return true;
  344.       }
  345.    }
  346.  
  347.    public static void setLeadAnchorWithoutSelection(ListSelectionModel var0, int var1, int var2) {
  348.       if (var2 == -1) {
  349.          var2 = var1;
  350.       }
  351.  
  352.       if (var1 == -1) {
  353.          var0.setAnchorSelectionIndex(-1);
  354.          var0.setLeadSelectionIndex(-1);
  355.       } else {
  356.          if (var0.isSelectedIndex(var1)) {
  357.             var0.addSelectionInterval(var1, var1);
  358.          } else {
  359.             var0.removeSelectionInterval(var1, var1);
  360.          }
  361.  
  362.          var0.setAnchorSelectionIndex(var2);
  363.       }
  364.  
  365.    }
  366.  
  367.    public static boolean shouldIgnore(MouseEvent var0, JComponent var1) {
  368.       return var1 == null || !var1.isEnabled() || !SwingUtilities.isLeftMouseButton(var0);
  369.    }
  370.  
  371.    public static void adjustFocus(JComponent var0) {
  372.       if (!var0.hasFocus() && var0.isRequestFocusEnabled()) {
  373.          var0.requestFocus();
  374.       }
  375.  
  376.    }
  377.  
  378.    public static int drawChars(JComponent var0, Graphics var1, char[] var2, int var3, int var4, int var5, int var6) {
  379.       if (var4 <= 0) {
  380.          return var5;
  381.       } else {
  382.          int var7 = var5 + getFontMetrics(var0, var1).charsWidth(var2, var3, var4);
  383.          if (isPrinting(var1)) {
  384.             Graphics2D var8 = getGraphics2D(var1);
  385.             if (var8 != null) {
  386.                FontRenderContext var9 = var8.getFontRenderContext();
  387.                FontRenderContext var10 = getFontRenderContext(var0);
  388.                if (var10.isAntiAliased() || var10.usesFractionalMetrics()) {
  389.                   var10 = new FontRenderContext(var10.getTransform(), false, false);
  390.                }
  391.  
  392.                if (var10 != null && !isFontRenderContextCompatible(var9, var10)) {
  393.                   TextLayout var16 = new TextLayout(new String(var2, var3, var4), var8.getFont(), var10);
  394.                   Color var12 = var8.getColor();
  395.                   if (var12 instanceof PrintColorUIResource) {
  396.                      var8.setColor(((PrintColorUIResource)var12).getPrintColor());
  397.                   }
  398.  
  399.                   var16.draw(var8, (float)var5, (float)var6);
  400.                   var8.setColor(var12);
  401.                   return var7;
  402.                }
  403.             }
  404.          }
  405.  
  406.          AATextInfo var13 = drawTextAntialiased(var0);
  407.          if (var13 != null && var1 instanceof Graphics2D) {
  408.             Graphics2D var14 = (Graphics2D)var1;
  409.             Object var15 = null;
  410.             Object var11 = var14.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING);
  411.             if (var13.aaHint != null && var13.aaHint != var11) {
  412.                var14.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, var13.aaHint);
  413.             } else {
  414.                var11 = null;
  415.             }
  416.  
  417.             if (var13.lcdContrastHint != null) {
  418.                var15 = var14.getRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST);
  419.                if (var13.lcdContrastHint.equals(var15)) {
  420.                   var15 = null;
  421.                } else {
  422.                   var14.setRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST, var13.lcdContrastHint);
  423.                }
  424.             }
  425.  
  426.             var1.drawChars(var2, var3, var4, var5, var6);
  427.             if (var11 != null) {
  428.                var14.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, var11);
  429.             }
  430.  
  431.             if (var15 != null) {
  432.                var14.setRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST, var15);
  433.             }
  434.          } else {
  435.             var1.drawChars(var2, var3, var4, var5, var6);
  436.          }
  437.  
  438.          return var7;
  439.       }
  440.    }
  441.  
  442.    public static float drawString(JComponent var0, Graphics var1, AttributedCharacterIterator var2, int var3, int var4) {
  443.       boolean var6 = isPrinting(var1);
  444.       Color var7 = var1.getColor();
  445.       if (var6 && var7 instanceof PrintColorUIResource) {
  446.          var1.setColor(((PrintColorUIResource)var7).getPrintColor());
  447.       }
  448.  
  449.       Graphics2D var8 = getGraphics2D(var1);
  450.       float var5;
  451.       if (var8 == null) {
  452.          var1.drawString(var2, var3, var4);
  453.          var5 = (float)var3;
  454.       } else {
  455.          FontRenderContext var9;
  456.          if (var6) {
  457.             var9 = getFontRenderContext(var0);
  458.             if (var9.isAntiAliased() || var9.usesFractionalMetrics()) {
  459.                var9 = new FontRenderContext(var9.getTransform(), false, false);
  460.             }
  461.          } else if ((var9 = getFRCProperty(var0)) == null) {
  462.             var9 = var8.getFontRenderContext();
  463.          }
  464.  
  465.          TextLayout var10 = new TextLayout(var2, var9);
  466.          var10.draw(var8, (float)var3, (float)var4);
  467.          var5 = var10.getAdvance();
  468.       }
  469.  
  470.       if (var6) {
  471.          var1.setColor(var7);
  472.       }
  473.  
  474.       return var5;
  475.    }
  476.  
  477.    public static boolean isFontRenderContextCompatible(FontRenderContext var0, FontRenderContext var1) {
  478.       return var0 != null ? var0.equals(var1) : var1 == null;
  479.    }
  480.  
  481.    public static Graphics2D getGraphics2D(Graphics var0) {
  482.       if (var0 instanceof Graphics2D) {
  483.          return (Graphics2D)var0;
  484.       } else {
  485.          return var0 instanceof ProxyPrintGraphics ? (Graphics2D)((Graphics2D)((ProxyPrintGraphics)var0).getGraphics()) : null;
  486.       }
  487.    }
  488.  
  489.    public static FontRenderContext getFontRenderContext(Component var0) {
  490.       assert var0 != null;
  491.  
  492.       return var0 == null ? DEFAULT_FRC : var0.getFontMetrics(var0.getFont()).getFontRenderContext();
  493.    }
  494.  
  495.    private static FontRenderContext getFontRenderContext(Component var0, FontMetrics var1) {
  496.       assert var1 != null || var0 != null;
  497.  
  498.       return var1 != null ? var1.getFontRenderContext() : getFontRenderContext(var0);
  499.    }
  500.  
  501.    public static FontMetrics getFontMetrics(JComponent var0, Font var1) {
  502.       FontRenderContext var2 = getFRCProperty(var0);
  503.       if (var2 == null) {
  504.          var2 = DEFAULT_FRC;
  505.       }
  506.  
  507.       return FontDesignMetrics.getMetrics(var1, var2);
  508.    }
  509.  
  510.    private static FontRenderContext getFRCProperty(JComponent var0) {
  511.       if (var0 != null) {
  512.          AATextInfo var1 = (AATextInfo)var0.getClientProperty(AA_TEXT_PROPERTY_KEY);
  513.          if (var1 != null) {
  514.             return var1.frc;
  515.          }
  516.       }
  517.  
  518.       return null;
  519.    }
  520.  
  521.    static boolean isPrinting(Graphics var0) {
  522.       return var0 instanceof PrinterGraphics || var0 instanceof PrintGraphics;
  523.    }
  524.  
  525.    public static boolean useSelectedTextColor(Highlighter.Highlight var0, JTextComponent var1) {
  526.       Highlighter.HighlightPainter var2 = var0.getPainter();
  527.       String var3 = var2.getClass().getName();
  528.       if (var3.indexOf("javax.swing.text.DefaultHighlighter") != 0 && var3.indexOf("com.sun.java.swing.plaf.windows.WindowsTextUI") != 0) {
  529.          return false;
  530.       } else {
  531.          try {
  532.             DefaultHighlighter.DefaultHighlightPainter var4 = (DefaultHighlighter.DefaultHighlightPainter)var2;
  533.             return var4.getColor() == null || var4.getColor().equals(var1.getSelectionColor());
  534.          } catch (ClassCastException var5) {
  535.             return false;
  536.          }
  537.       }
  538.    }
  539.  
  540.    public static boolean canAccessSystemClipboard() {
  541.       boolean var0 = false;
  542.       if (!GraphicsEnvironment.isHeadless()) {
  543.          SecurityManager var1 = System.getSecurityManager();
  544.          if (var1 == null) {
  545.             var0 = true;
  546.          } else {
  547.             try {
  548.                var1.checkSystemClipboardAccess();
  549.                var0 = true;
  550.             } catch (SecurityException var3) {
  551.             }
  552.  
  553.             if (var0 && !isTrustedContext()) {
  554.                var0 = canCurrentEventAccessSystemClipboard(true);
  555.             }
  556.          }
  557.       }
  558.  
  559.       return var0;
  560.    }
  561.  
  562.    public static boolean canCurrentEventAccessSystemClipboard() {
  563.       return isTrustedContext() || canCurrentEventAccessSystemClipboard(false);
  564.    }
  565.  
  566.    public static boolean canEventAccessSystemClipboard(AWTEvent var0) {
  567.       return isTrustedContext() || canEventAccessSystemClipboard(var0, false);
  568.    }
  569.  
  570.    private static synchronized boolean inputEvent_canAccessSystemClipboard(InputEvent var0) {
  571.       if (inputEvent_CanAccessSystemClipboard_Field == null) {
  572.          inputEvent_CanAccessSystemClipboard_Field = (Field)AccessController.doPrivileged(new 1());
  573.       }
  574.  
  575.       if (inputEvent_CanAccessSystemClipboard_Field == null) {
  576.          return false;
  577.       } else {
  578.          boolean var1 = false;
  579.  
  580.          try {
  581.             var1 = inputEvent_CanAccessSystemClipboard_Field.getBoolean(var0);
  582.          } catch (IllegalAccessException var3) {
  583.          }
  584.  
  585.          return var1;
  586.       }
  587.    }
  588.  
  589.    private static boolean isAccessClipboardGesture(InputEvent var0) {
  590.       boolean var1 = false;
  591.       if (var0 instanceof KeyEvent) {
  592.          KeyEvent var2 = (KeyEvent)var0;
  593.          int var3 = var2.getKeyCode();
  594.          int var4 = var2.getModifiers();
  595.          switch (var3) {
  596.             case 67:
  597.             case 86:
  598.             case 88:
  599.                var1 = var4 == 2;
  600.                break;
  601.             case 127:
  602.                var1 = var4 == 1;
  603.                break;
  604.             case 155:
  605.                var1 = var4 == 2 || var4 == 1;
  606.                break;
  607.             case 65485:
  608.             case 65487:
  609.             case 65489:
  610.                var1 = true;
  611.          }
  612.       }
  613.  
  614.       return var1;
  615.    }
  616.  
  617.    private static boolean canEventAccessSystemClipboard(AWTEvent var0, boolean var1) {
  618.       if (!EventQueue.isDispatchThread()) {
  619.          return true;
  620.       } else {
  621.          return !(var0 instanceof InputEvent) || var1 && !isAccessClipboardGesture((InputEvent)var0) ? false : inputEvent_canAccessSystemClipboard((InputEvent)var0);
  622.       }
  623.    }
  624.  
  625.    private static boolean canCurrentEventAccessSystemClipboard(boolean var0) {
  626.       AWTEvent var1 = EventQueue.getCurrentEvent();
  627.       return canEventAccessSystemClipboard(var1, var0);
  628.    }
  629.  
  630.    private static boolean isTrustedContext() {
  631.       return System.getSecurityManager() == null || AppContext.getAppContext().get("UNTRUSTED_CLIPBOARD_ACCESS_KEY") == null;
  632.    }
  633.  
  634.    public static String displayPropertiesToCSS(Font var0, Color var1) {
  635.       StringBuffer var2 = new StringBuffer("body {");
  636.       if (var0 != null) {
  637.          var2.append(" font-family: ");
  638.          var2.append(var0.getFamily());
  639.          var2.append(" ; ");
  640.          var2.append(" font-size: ");
  641.          var2.append(var0.getSize());
  642.          var2.append("pt ;");
  643.          if (var0.isBold()) {
  644.             var2.append(" font-weight: 700 ; ");
  645.          }
  646.  
  647.          if (var0.isItalic()) {
  648.             var2.append(" font-style: italic ; ");
  649.          }
  650.       }
  651.  
  652.       if (var1 != null) {
  653.          var2.append(" color: #");
  654.          if (var1.getRed() < 16) {
  655.             var2.append('0');
  656.          }
  657.  
  658.          var2.append(Integer.toHexString(var1.getRed()));
  659.          if (var1.getGreen() < 16) {
  660.             var2.append('0');
  661.          }
  662.  
  663.          var2.append(Integer.toHexString(var1.getGreen()));
  664.          if (var1.getBlue() < 16) {
  665.             var2.append('0');
  666.          }
  667.  
  668.          var2.append(Integer.toHexString(var1.getBlue()));
  669.          var2.append(" ; ");
  670.       }
  671.  
  672.       var2.append(" }");
  673.       return var2.toString();
  674.    }
  675.  
  676.    public static Object makeIcon(Class<?> var0, Class<?> var1, String var2) {
  677.       return new 2(var0, var2, var1);
  678.    }
  679.  
  680.    public static boolean isLocalDisplay() {
  681.       try {
  682.          if (System.getProperty("os.name").startsWith("Windows")) {
  683.             return true;
  684.          } else {
  685.             Class var0 = Class.forName("sun.awt.X11GraphicsEnvironment");
  686.             Method var1 = var0.getMethod("isDisplayLocal");
  687.             return (Boolean)var1.invoke((Object)null, (Object[])null);
  688.          }
  689.       } catch (Throwable var2) {
  690.          return true;
  691.       }
  692.    }
  693.  
  694.    public static int getUIDefaultsInt(Object var0) {
  695.       return getUIDefaultsInt(var0, 0);
  696.    }
  697.  
  698.    public static int getUIDefaultsInt(Object var0, Locale var1) {
  699.       return getUIDefaultsInt(var0, var1, 0);
  700.    }
  701.  
  702.    public static int getUIDefaultsInt(Object var0, int var1) {
  703.       return getUIDefaultsInt(var0, (Locale)null, var1);
  704.    }
  705.  
  706.    public static int getUIDefaultsInt(Object var0, Locale var1, int var2) {
  707.       Object var3 = UIManager.get(var0, var1);
  708.       if (var3 instanceof Integer) {
  709.          return (Integer)var3;
  710.       } else {
  711.          if (var3 instanceof String) {
  712.             try {
  713.                return Integer.parseInt((String)var3);
  714.             } catch (NumberFormatException var5) {
  715.             }
  716.          }
  717.  
  718.          return var2;
  719.       }
  720.    }
  721.  
  722.    public static Component compositeRequestFocus(Component var0) {
  723.       if (var0 instanceof Container) {
  724.          Container var1 = (Container)var0;
  725.          if (var1.isFocusCycleRoot()) {
  726.             FocusTraversalPolicy var2 = var1.getFocusTraversalPolicy();
  727.             Component var3 = var2.getDefaultComponent(var1);
  728.             if (var3 != null) {
  729.                var3.requestFocus();
  730.                return var3;
  731.             }
  732.          }
  733.  
  734.          Container var5 = var1.getFocusCycleRootAncestor();
  735.          if (var5 != null) {
  736.             FocusTraversalPolicy var6 = var5.getFocusTraversalPolicy();
  737.             Component var4 = var6.getComponentAfter(var5, var1);
  738.             if (var4 != null && SwingUtilities.isDescendingFrom(var4, var1)) {
  739.                var4.requestFocus();
  740.                return var4;
  741.             }
  742.          }
  743.       }
  744.  
  745.       if (var0.isFocusable()) {
  746.          var0.requestFocus();
  747.          return var0;
  748.       } else {
  749.          return null;
  750.       }
  751.    }
  752.  
  753.    public static boolean tabbedPaneChangeFocusTo(Component var0) {
  754.       if (var0 != null) {
  755.          if (var0.isFocusTraversable()) {
  756.             compositeRequestFocus(var0);
  757.             return true;
  758.          }
  759.  
  760.          if (var0 instanceof JComponent && ((JComponent)var0).requestDefaultFocus()) {
  761.             return true;
  762.          }
  763.       }
  764.  
  765.       return false;
  766.    }
  767.  
  768.    public static <V> Future<V> submit(Callable<V> var0) {
  769.       if (var0 == null) {
  770.          throw new NullPointerException();
  771.       } else {
  772.          FutureTask var1 = new FutureTask(var0);
  773.          execute(var1);
  774.          return var1;
  775.       }
  776.    }
  777.  
  778.    public static <V> Future<V> submit(Runnable var0, V var1) {
  779.       if (var0 == null) {
  780.          throw new NullPointerException();
  781.       } else {
  782.          FutureTask var2 = new FutureTask(var0, var1);
  783.          execute(var2);
  784.          return var2;
  785.       }
  786.    }
  787.  
  788.    private static void execute(Runnable var0) {
  789.       SwingUtilities.invokeLater(var0);
  790.    }
  791.  
  792.    public static void setSkipClickCount(Component var0, int var1) {
  793.       if (var0 instanceof JTextComponent && ((JTextComponent)var0).getCaret() instanceof DefaultCaret) {
  794.          ((JTextComponent)var0).putClientProperty(SKIP_CLICK_COUNT, var1);
  795.       }
  796.  
  797.    }
  798.  
  799.    public static int getAdjustedClickCount(JTextComponent var0, MouseEvent var1) {
  800.       int var2 = var1.getClickCount();
  801.       if (var2 == 1) {
  802.          var0.putClientProperty(SKIP_CLICK_COUNT, (Object)null);
  803.       } else {
  804.          Integer var3 = (Integer)var0.getClientProperty(SKIP_CLICK_COUNT);
  805.          if (var3 != null) {
  806.             return var2 - var3;
  807.          }
  808.       }
  809.  
  810.       return var2;
  811.    }
  812.  
  813.    private static Section liesIn(Rectangle var0, Point var1, boolean var2, boolean var3, boolean var4) {
  814.       int var5;
  815.       int var6;
  816.       int var7;
  817.       boolean var8;
  818.       if (var2) {
  819.          var5 = var0.x;
  820.          var6 = var1.x;
  821.          var7 = var0.width;
  822.          var8 = var3;
  823.       } else {
  824.          var5 = var0.y;
  825.          var6 = var1.y;
  826.          var7 = var0.height;
  827.          var8 = true;
  828.       }
  829.  
  830.       if (var4) {
  831.          int var10 = var7 >= 30 ? 10 : var7 / 3;
  832.          if (var6 < var5 + var10) {
  833.             return var8 ? sun.swing.SwingUtilities2.Section.LEADING : sun.swing.SwingUtilities2.Section.TRAILING;
  834.          } else if (var6 >= var5 + var7 - var10) {
  835.             return var8 ? sun.swing.SwingUtilities2.Section.TRAILING : sun.swing.SwingUtilities2.Section.LEADING;
  836.          } else {
  837.             return sun.swing.SwingUtilities2.Section.MIDDLE;
  838.          }
  839.       } else {
  840.          int var9 = var5 + var7 / 2;
  841.          if (var8) {
  842.             return var6 >= var9 ? sun.swing.SwingUtilities2.Section.TRAILING : sun.swing.SwingUtilities2.Section.LEADING;
  843.          } else {
  844.             return var6 < var9 ? sun.swing.SwingUtilities2.Section.TRAILING : sun.swing.SwingUtilities2.Section.LEADING;
  845.          }
  846.       }
  847.    }
  848.  
  849.    public static Section liesInHorizontal(Rectangle var0, Point var1, boolean var2, boolean var3) {
  850.       return liesIn(var0, var1, true, var2, var3);
  851.    }
  852.  
  853.    public static Section liesInVertical(Rectangle var0, Point var1, boolean var2) {
  854.       return liesIn(var0, var1, false, false, var2);
  855.    }
  856. }
  857.